const loaderUtils = require('loader-utils');

// 以下方式只能return一个参数, 可以使用callback传递多个参数
// module.exports = function(source) {
//   console.log(this);
//   const options = loaderUtils.getOptions(this);
//   return source.replace('hello', `hello ${options.name}`);
// }


// 不能是一个箭头函数
// https://webpack.js.org/api/loaders/#thisquery
module.exports = function(source) {
  console.log(this);
  // loaderUtils 获取 webpack.config.js 中 options对象参数
  // source 是js文件的内容(源代码)
  // loader的原理是: 对内容做变更, 然后return 回去到 output定义的目录中
  const options = loaderUtils.getOptions(this);
  const result = source.replace('hello', `hello ${options.name}`);

  // 第一个参数为 error 错误信息, 没有则为 null
  // 第二个参数 为变更后的源代码
  // 第三个参数 为sourceMap信息, 没有则为 null
  // 第四个参数 额外的信息
  // this.callback 等价于 一个return
  this.callback(null, result, null, 'meta'); 
}